package com.czk.doubleLinkedList;

/**
 * @Author:ChenZhangKun
 * @Date: 2020/6/16 21:01
 */
public class DoubleLinkedListTest {
    public static void main(String[] args) {
        DoubleLinkedList doubleLinkedList=new DoubleLinkedList();
        Node node1=new  Node(1);
        Node node2=new Node(2);
        Node node3=new Node(3);
        doubleLinkedList.addNode(node2);
        doubleLinkedList.addNode(node1);
        doubleLinkedList.addNode(node3);
        doubleLinkedList.list();
    }
}
class DoubleLinkedList{
    // 初始化头结点
    Node head=new Node("");
    // 遍历链表
    public void list(){
        if (head.next==null) return;
        Node temp=head.next;
       while (temp!=null){
           System.out.println(temp.data);
           temp=temp.next;
       }
    }
    // 添加节点
    public void addNode(Node node){
      /*  if (head.next==null) {head.next=node;node.pre=head;return;}
        Node temp=head;
        while (true){
            if (temp.next==null){
                temp.next=node;
                node.pre=temp;
                break;
            }
            temp=temp.next;
        }*/
      Node temp=head;
      while (true){
          if (temp.next==null){
              break;
          }
          temp=temp.next;
      }
      temp.next=node;
      node.pre=temp;
    }
    // 删除某个节点
    public void remove(Node node){
        if (head.next==null) return;
        Node temp=head;
        while (true){
            if (temp.next.data.equals(node.data)){
                temp.next=node.next;
                node.next.pre=temp;
                break;
            }
            temp=temp.next;
        }
    }
    // 修改某个几点
    public void update(Node node){
        if (head.next==null) return;
        Node temp=head;
        while (true){
            if (temp.next.equals(node)){
                // 修改某个节点
                // 照理说应该用某个标记来判断
                temp.next.data="";
                break;
            }
            temp=temp.next;
        }
    }

}
class Node{
    public Object data; // 数据
    public Node pre; // 前一个节点
    public Node next; // 后一个节点

    @Override
    public String toString() {
        return "Node{" +
                "data=" + data +
                ", pre=" + pre +
                ", next=" + next +
                '}';
    }

    public Node(Object data) {
        this.data = data;
    }
}
